//导入Commonjs path 模块
const path = require('path')

//导入CSS 插件 添加到配置里面
const MiniCssExtractPlugin = require("mini-css-extract-plugin");

//导入 html 插件添加到配置里面
const HTMLWebpackPlugin = require('html-webpack-plugin')

//配置出口和入口文件夹名称
module.exports = {
    //更改为开发模式
    mode: 'development',
    //入口文件夹修改名称  可以使用相对路径
    entry: "./src/main.js",
    //出口文件夹修改名称   必须使用绝对路径
    output: {
        path: path.resolve(__dirname, 'dist'),
        filename: 'bundle.js'
    },
    //配置插件  自动复制HTML
    plugins: [
        new HTMLWebpackPlugin({
            //设置要复制那个html的路径
            template: './public/index.html'
        }),
        new MiniCssExtractPlugin()
    ],
    module: {
        //打包CSS文件的配置属性
        rules: [
            {
                test: /\.css$/i,
                use: ['style-loader', 'css-loader']
            },
            //打包less文件的配置属性
            {
                test: /\.less$/i,
                use: ['style-loader', 'css-loader', 'less-loader']
            },
            //添加图片的处理
            {
                test: /\.(png|jpg|gif|jpeg)$/i,
                type: 'asset'
            },
            {
                test: /\.(woff|woff2|eot|svg|ttf)$/i,
                type: 'asset/resource' // 不转为 base64 直接复制文件
            },
            //JS语法降级
            {
                test: /\.m?js$/, // 匹配js结尾文件
                exclude: /(node_modules|bower_components)/, // 不转换这2个文件夹里的js
                use: {
                    loader: 'babel-loader', // 使用加载器-处理
                    options: {
                        presets: ['@babel/preset-env'] // 预设:转码规则(用bable开发环境本来预设的)
                    }
                }
            },
            {
                test: /\.css$/i,
                use: [MiniCssExtractPlugin.loader, "css-loader"],
            }
        ]



    },

    devServer: {
        port: 3000, // 端口号
        open: true // 启动后自动打开浏览器
    }

}